/**replace special char**/
String.prototype.relapceCharacters=function(){var htmlspecialchars = {"&" : "&amp;","<":"&lt;", ">" : "&gt;",'"' : "&quot;"};var txt =this;for(var schar in htmlspecialchars){txt=txt.replace(schar, htmlspecialchars[schar]);}return txt;}
/**获取表格选择@为分割得到的数组里值**/
String.prototype.get = function(index) {
	var text = this;
	text = (text || "").split("@");
	if(text){return (text[index]?text[index]:"");}
	return "";
};
/**表格初始化数据，前台数据包含&quot,需要转换成为双字符**/
String.prototype.toStringHtml = function() {
	var text = this;return (text || "").replace(/&quot;/g,"\"");
};
/**replace trim**/
String.prototype.trim = function() {var text = this;return (text || "").replace(/^[\s]+|[\s]+$/g, "");}
/**char remve end**/
function setCaretAtEnd(obj, pos){if (obj.createTextRange) {var r = obj.createTextRange();r.moveStart('character', pos);r.collapse();r.select();}}
/**set script file**/
function setRequire(file) {var head = document.getElementsByTagName("head").item(0);script = document.createElement("script");script.src = file;script.type = "text/javascript";head.appendChild(script)}
/**set textarea is length on onkeydown using**/
function setTextAreaMaxLength(obj, len){var code = event.keyCode;if (code == 8 || code == 16 || code == 17 || code == 88 || code == 67 || (code > 36 && code <= 40)) {event.returnValue = true;return;}obj.onpaste = function(){var pasteValue = window.clipboardData.getData("TEXT");obj.value = (obj.value + pasteValue).substring(0, len);event.returnValue = false;};if (obj.value.length >= len) {event.returnValue = false;return;}}
/**get china font length**/
String.prototype.getByteLen = function() {var paddern = /[^\x00-\xff]/g;var txt = this;return txt.replace(paddern, "  ").length;}
function keypress(evt){evt = evt ? evt : window.event;if("$%\^*\\'\"+".indexOf(String.fromCharCode(evt.keyCode))!=-1){evt.returnValue = false;}};
document.onkeypress =keypress;

window.giseceWin = {}
window.giseceWin.devMode = true;
window.giseceWin.waring={};
window.onhelp = function() {return false;}
//document.oncontextmenu =function(){return false;}
/**
 *获取最高级框架内方法 
 *调用方法：var parentFun = parentWindowx("register");
 *@param funName 方法名
 */
function parentWindowx(funName){
	var i=0;
	var _parent = window.parent;
	while(_parent){
		if(_parent[funName]){
			return _parent[funName];
			break;
		}
		if((++i)>=5)break;
		_parent = _parent.parent;
	}
	return null;
}
/**只能输入小数点+数字" +
" id:控件Id" +
" len:保留小数点位数" +
" ary:过滤掉键盘keyCode" +
" callBlurFun：在onblur中的回调函数，参数为this.value
**/
function initInputFloatOrNumber(id,len,ary,callBlurFun){if($id(id)){var _obj=$id(id);
		_obj.style.imeMode='disabled';
	    _obj.onkeydown=function(){
	    	if(ary&&ary.length!=0){
	    		var currKey=0,e=e||event; currKey=e.keyCode||e.which||e.charCode;
	    		for(var vr=0;vr<ary.length;vr++){
	    			if(ary[vr]==currKey){
	    				window.event.returnValue = false;
	    				break;
	    			}
	    		}
	    	}
	    }
		_obj.onkeypress=function(){if(!this.value.match(/^[\+\-]?\d*?\.?\d*?$/))this.value=this.t_value;else this.t_value=this.value;if(this.value.match(/^(?:[\+\-]?\d+(?:\.\d+)?)?$/))this.o_value=this.value;}
		_obj.onkeyup=function(){if(!this.value.match(/^[\+\-]?\d*?\.?\d*?$/))this.value=this.t_value;else this.t_value=this.value;if(this.value.match(/^(?:[\+\-]?\d+(?:\.\d+)?)?$/))this.o_value=this.value;}
		_obj.onblur=function(){
			this._len=len||0;
			if(!this.value.match(/^(?:[\+\-]?\d+(?:\.\d+)?|\.\d*?)?$/))this.value=this.o_value;else{if(this.value.match(/^\.\d+$/))this.value=0+this.value;if(this.value.match(/^\.$/))this.value=0;this.o_value=this.value};
			this.__tmpVal=this.value.toString().trim();
			if ((this.__tmpVal!="")) {
				this.value = parseFloat(this.__tmpVal).toFixed(this._len);
			}
			if(callBlurFun){callBlurFun(this.value,this)};
		}
	}
}
//通过该方法来为每次弹出的模态框设置最新的zIndex值，从而使最新的modal显示在最前面
$(document).on('show.bs.modal', '.modal', function (event) {
    var zIndex = 1040 + (10 * $('.modal:visible').length);
    $(this).css('z-index', zIndex);
});
/*************************************
 * 内存对象定义
 * 用于动态定制模拟定义js文件
 * 定义方法：
 * define("/script/commom",function(exports){
 *  exports.getUserList=function(){
 *      .......
 *  }
 * return exports;
 * })
 * 调用方法
 * require("/script/commom").getUserList()
 *************************************/
(function(global){
	var mappingx = {}, cachex = {};
	//获取URL参数
	global.xbdunRequest = function(name) {
	    var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
	    var r = window.location.search.substr(1).match(reg);
	    if (r != null)
	        return unescape(r[2]);
	    return null;
	};
	//必须要id包含后缀.js
	global.xbdunDefine = function(id, func){
		if(!mappingx[id]){mappingx[id] = func;}else{alert("Sorry,function alreay have here!");}
	};
	global.xbdunRequire = function(id){
		if(!/\.js$/.test(id))id +='.js';
		if(cachex[id]){
			return cachex[id];
		}else{
			return cachex[id] = mappingx[id]({});
        }
	};
})(this);
//commom.js
xbdunDefine("common.js",function(exports){
	/*************************************************************
	 * 最顶层遮挡层，用于提示用户操作等待服务器相应信息
	 * @param bl : undefined or true 显示
	 * @param msg: 正在加载提示信息
	 ************************************************************/
	exports["loading"]=function(bl,msg){
		var loadingFun = parentWindowx("showLoading");
		if(loadingFun){loadingFun(bl,msg);}
	};
	/****************************************************
	 * 通用form表单提交方法
	 * @param jqform :表单id或者jquery其他
	 * @param beforeValiFn：之前验证的消息，参数为：验证后的错误集合信息
	 ****************************************************/
	exports["submit"]=function(jqform,beforeValiFn){
		$(jqform).trigger("submitx",[beforeValiFn]);
	};
	/********************
	 * alert
	 * @param bl undefind or true 显示
	 * @param msg 提示消息
	 * @param fnSuccess 钩子函数,只有一个参数是按钮确定
	 * @param num 出现按钮个数，默认1个确认按钮，2表示2个，取消与确定
	 ********************/
	exports["alert"]=function(bl,msg,fnSuccess,num){
		msg = msg||"";
		var loadingFun = parentWindowx("xbdunAlert");
		if(loadingFun){loadingFun(bl,msg,fnSuccess,num);}
	};
	/********************
	 * 用户基本信息查询
	 * @param params  {singleChked:false,isAdd:false}undefind or true 是否多选
	 * @param fnSubmit 钩子函数,点击确定后回调函数，用于显示用户的勾选项
	 * @param fnInitAfter 钩子函数,初始化后调用函数
	 * @param num 出现按钮个数，默认1个确认按钮，2表示2个，取消与确定
	 ********************/
	exports["showUserInfo"]=function(params){
		var xbdunUserInfo = parentWindowx("xbdunUserSerch");
		if(xbdunUserInfo){xbdunUserInfo(params);}
	}
	
	/**移除错误提示
	 * @param obj jquery对象
	 * **/
	exports["removeValidate"]=function(obj){
		if(obj){
			//如果前面有错误验证，那么应该去除掉
			if(obj.parent().hasClass("input_validation-error")){
	    		change_error_style(obj,"remove");
	    		change_tip(obj,null,"remove");	
	    	}	
		}
	};
	/**添加错误提示
	 * @param obj jquery对象
	 * **/
	exports["addValidate"]=function(obj){
		if(obj){
			change_error_style(obj,"add");
			change_tip(obj,null,"add");
		}
	};
	/**重置Form表单信息
	 * @param jqFormId 表单#id
	 * @param result JSon对象:{remove:是否移出错误,lastFun:每个属性需要执行方法,参数为当前对象}
	 * **/
	exports["reset"]=function(jqFormId,result){
		var _result = {remove:true,lastFun:null};
		if(result)$.extend(_result,result);
		if(jqFormId){
			$("input[type=text],input[type=hidden],input[type=password],select,textarea",jqFormId).each(function(){
				$(this).val("");
				if(_result.remove)exports.removeValidate($(this));
				if(_result.lastFun&&$.isFunction(_result.lastFun)){_result.lastFun($(this));}
			});
		}
	};
	/**
	 * MsgDialog信息框显示：#divId
	 * @param MsgDialog 为MsgDialog的JqueryId
	 * */
	exports["showDialogBox"]=function(MsgDialogId,boxTopArg){
		boxTopArg = boxTopArg||"15%";
		var msgBox = $("div.dialogBox:first",MsgDialogId);
		if(msgBox.size()==1){
			if(msgBox.attr("isinited")!="1"){
				//实现拖动
				msgBox.bind("mouseover",function(){return new dragPObject(this);});
				msgBox.attr("isinited","1");//已经初始化
			}
			msgBox.css({display:"block",width:"90%",left:"5%"}).animate({top: boxTopArg}, "fast");
			$(MsgDialogId).css("display","block");
		}else{
			alert("the object is null!");
		}
	};
	/**
	 * MsgDialog信息框消失：#divId
	 * @param MsgDialog 为MsgDialog的JqueryId
	 * */
	exports["hideDialogBox"]=function(MsgDialogId){
		$("div.dialogBox:first",MsgDialogId).animate({left:"5%",top: '0%'}, "fast",function(){
			$(this).hide();
			$(MsgDialogId).css("display","none");
		});
	};
	/**
	 * 根据name前缀获取JSon对象控件值,
	 * 例如：<input type="text" id="com_id" name="com.id"/>
	 * 方法使用：getPostParams("#controlId","com")
	 * @param jqContrlId 容器JqueryId #id
	 * @param regPre 匹配的前缀
	 * **/
	exports["getPostNameParams"]=function(jqContrlId,regPre){
		var tempJSon = {};
		if(jqContrlId&&regPre){
			$("input[type=text][name^='"+regPre+"'],input[type=radio][name^='"+regPre+"']:checked,input[type=checkbox][name^='"+regPre+"']:checked,input[type=hidden][name^='"+regPre+"'],select[name^='"+regPre+"'],textarea[name^='"+regPre+"']",jqContrlId).each(function(){
				tempJSon[$(this).attr("name")]=$(this).val();
			});
		}else{exports.error("Does not exist for args[0]:"+jqContrlId+" or args[1]:"+regPre);};
		return tempJSon;
	};
	/**
	 * 根据name前缀获取JSon对象控件值,
	 * 例如：<input type="text" id="companly_address" name="companly.address"/>
	 * 方法使用：setPostNameParams("companly.",{address:'xxxxx'},{disabled:false})
	 * @param regPre 匹配的前缀
	 * @param result JSon对象与后台对象属性对应
	 * @param attr 设置属性
	 * **/
	exports["setPostNameParams"]=function(regPre,result,attr){
		if(regPre&&result){
			for(var n in result){
				$("input[type=text][name='"+(regPre+n)+"'],input[type=hidden][name='"+(regPre+n)+"'],select[name='"+(regPre+n)+"'],textarea[type=text][name='"+(regPre+n)+"']").each(function(x){
					$(this).val((typeof(result[n])!=undefined?result[n]:""));
					if(attr){$(this).attr(attr);}
				});
			}
		}else{exports.error("Does not exist for args[0]:"+jqContrlId+" or args[1]:"+regPre);};
	};
	/**
	 * 框架顶级Dialog窗口
	 * @param args={
	 *   height://窗口Body高度
	 *   url://新链接地址
	 *   isRefresh://是否刷新页面，默认不刷新，如果访问的页面和前一个页面相同不刷新
	 *   scrollx://x轴是否出现滚动条
	 *   scrolly://y轴是否出现滚动条
	 *   callBack:function(keys,result)//keys:选择的key集合，result是json数组
	 * }
	 * */
	exports["showParentDialogBox"]=function(args){
		if(!args)return;
		var loadingFun = parentWindowx("showParentDialogBox");
		if(loadingFun){loadingFun(args);}
	};
	//关闭
	exports["hiddenParentDialogBox"]=function(){
		var loadingFun = parentWindowx("hideParentDialogBox");
		if(loadingFun){loadingFun();}
	};
	/**
	 *顶级框架Dialog回调函数
	 *使用方法：common.getRegisterCallBackBox({url:...,callBack:function(keys,result){
	 *   //keys 主键内容
	 *   //result json数组
	 *}})
	 *@param result为json格式[{},{}]
	 */
	exports["getRegisterCallBackBox"] = function(keys,result){
		var loadingFun = parentWindowx("_globCallBackFun");
		if(loadingFun){loadingFun(keys,result);}
		//隐藏父窗口弹出层
		exports.hiddenParentDialogBox();
	}
	/**
	 *顶级框架Dialog窗口，设置里面表格单选还是多选
	 *前提：必须是在调用 getRegisterCallBackBox 这个方法后才可以 正确 使用
	 *使用方法：$("***").tablesorter({columnModel:[{
	 *{
			html : "checkbox",
			columnName : [ "priKey","companyId" ],
			singleChk:common.getSingleChk()//设置单选还是多选模式
		}//使用主键+企业编号
	 *}]})
	 */
	exports["getSingleChk"] = function(){
		//如果为1那么说明是多选，否则就为单选
		return (parentWindowx("_singleChkMode")==1?false:true);
	}
	/**
	 *设置对象文档上下左右居中
	 *@param forId 对象居中(#id)
	 *@param plt 靠左边多少
	 *@param prt 靠右边多少
	 */
	exports["setCenterControl"]=function(forId,plt,prt){
		if(!args)return;
		var loadingFun = parentWindowx("isceShowCenter");
		if(loadingFun){loadingFun(forId,plt,prt,document);}
	};
	return exports;
});